<template>
	<view>
		<search></search>
		<tab :tabs="tabs" @tabChange="tabChange"></tab>

		<!-- 商品列表 -->
		<!-- @scrolltolower 监听触底事件 -->
		<!-- lower-threshold 设置距离底部多少像素的时候触发事件 -->
		<scroll-view @scrolltolower="getNextPage" :lower-threshold="100" :scroll-y="true" class="products_container">
			<block v-for="(item, index) in products" :key="index">
				<product 
				:goods_id="item.goods_id" 
				:goods_name="item.goods_name" 
				:goods_small_logo="item.goods_small_logo"
				:goods_price="item.goods_price">
				</product>
			</block>
		</scroll-view>
	</view>
</template>

<script>
	import search from '@/components/search/index.vue'
	import Tab from '@/components/Tab.vue'
	import Product from '@/components/Product.vue'
	export default {
		data() {
			return {
				tabs: ['综合', '销量', '价格'],
				products: [],
				pagenum: 1, // 当前的页码
				isFinish: false, // 表示是否到了最后一页
				cid: 0, // 当前请求的分类
			};
		},
		onLoad(options) {
			// 如果cat_id为undefined时，给设置为空值，否则会导致请求数据失败
			this.cid = options.cat_id || '';
			this.getProductList()
		},
		methods: {
			tabChange(index) {
				console.log('tab被点击，当前索引是' + index)
			},
			// 获取商品数据
			async getProductList() {
				uni.showLoading({
					title: '数据加载中...'
				})
				const [error, res] = await uni.request({
					url: 'https://api-hmugo-web.itheima.net/api/public/v1/goods/search',
					data: { pagenum: this.pagenum, cid: this.cid, pagesize: 40 }
				})
				// 判断是否已经是最后一页数据
				if (res.data.message.goods.length < 20) {
					this.isFinish = true;
				}
				// 翻页的数据要拼接在原数组后
				// this.products = res.data.message.goods;
				this.products = this.products.concat(res.data.message.goods)
				uni.hideLoading();
			},
			getNextPage() {
				console.log('触发了翻页')
				if (this.isFinish) {
					uni.showToast({
						title: '没有数据了，不要再拉了',
						icon: 'none'
					})
					return
				} // 如果是最后一页，不要再请求数据
				this.pagenum ++;
				this.getProductList();
			}
		},
		components: {
			search,
			Tab,
			Product
		}
	}
</script>

<style lang="less">
	.products_container {
		margin-top: 9rpx;
		height: calc(100vh - 188rpx);
	}
</style>